/*******************************************************************************************
  ZH星辰51单片机
  技术支持QQ群：975748331

* 文件: libRichKM.h
* 作者: 朱昊源
* 审核：洪灿墅
* 日期：2024-11-06
* 描述：矩阵键盘库
* 警告：此文件中的任何修改都将被覆盖。如需修改代码，请新建工程并复制代码，切勿直接在此文件中进行修改！
*******************************************************************************************/

#ifndef __LIBRICHKM_H__
#define __LIBRICHKM_H__

/// @brief 扫描矩阵键盘所有按键的按下状态。最多能稳定支持同时按下两个按键，同时按下三个按键可能会出现异常。
///	@attention 矩阵键盘右下角为0点。最下面一排为第0排，最上面一排为第3排。最右侧一列为第0列，最左侧一列为第3列。
/// @return 16个按键按下状态所对应的unsigned int型数据。unsigned int占2字节，16位。16位二进制从右至左，对应从矩阵键盘右下到左上全部按键的按下状态。对应位为0表示未按下，1表示按下。
///
/// 示例：返回81，二进制为0000 0000 1000 0001。最右侧的1代表最右下角的按键被按下，从右至左第8位的1代表第1排（从下至上的第二排）第3个（从右至左的第四列）按键被按下。
///
/// 示例：返回9000，二进制为1001 0000 0000 0000。从右至左第11位的1代表第3排第0个按键，即第11个按键被按下。从右至左第15位的1代表第3排第3个按键，即第15个按键被按下。
unsigned int libRichKM_ScanAll();

/// @brief 扫描矩阵键盘上单个按键的按下状态。
/// @param x 要扫描的按键列。取值范围[0, 3]。从0至3分别对应矩阵键盘从右至左的4列。
/// @param y 要扫描的按键行。取值范围[0, 3]。从0至3分别对应矩阵键盘从下至上的4行。
/// @return 指定按键是否按下。取值范围[0, 1]。1表示x和y所制定的按键按下。0表示该按键未按下。
unsigned char libRichKM_ScanSingle(unsigned char x, unsigned char y);

#endif